//
//  RZConversationViewController.h
//  RZIM
//
//  Created by reyzhang on 2021/8/4.
//  聊天会话

#import "RZIMBaseViewController.h"
#import "RZIMClient.h"
#import "RZChatSessionInputBarControl.h"
#import "RZConversationCollectionViewHeader.h"
#import "RZConversationViewLayout.h"


NS_ASSUME_NONNULL_BEGIN

@interface RZConversationViewController : RZIMBaseViewController<UICollectionViewDelegate,UICollectionViewDataSource>

#pragma mark - 初始化

/*!
 初始化会话页面

 @param conversationType 会话类型
 @param targetId         目标会话ID (单聊传用户id, 群聊传groupId)

 @return 会话页面对象
 */
- (id)initWithConversationType:(RZConversationType)conversationType targetId:(NSString *)targetId label:(NSInteger)label;
- (id)initWithConversationType:(RZConversationType)conversationType targetId:(NSString *)targetId;

#pragma mark - 会话属性

/*!
 当前会话的会话类型
 */
@property (nonatomic) RZConversationType conversationType;
@property (nonatomic, strong) __block RZConversation *conversation;

/*!
 目标会话ID
 */
@property (nonatomic, copy) NSString *targetId;

/**
 标签
 */
@property(nonatomic,assign) NSInteger label;

#pragma mark - 会话页面属性
/**
 进入页面时定位的消息的发送时间

 @discussion 用于消息搜索之后点击进入页面等场景
 */
@property (nonatomic, assign) long long locatedMessageSentTime;

/*!
 设置进入会话页面后下拉刷新从远端获取消息的条数，默认是 10。
 @discussion 此属性需要在viewDidLoad之前进行设置。
 */
@property (nonatomic, assign) int defaultRemoteHistoryMessageCount;

@property (nonatomic, strong) NSMutableArray *conversationDataRepository;


@property (nonatomic, strong) RZConversationViewLayout *flowLayout;
/*!
 会话页面的CollectionView
 */
@property (nonatomic, strong,nullable) UICollectionView *conversationMessageCollectionView;

@property (nonatomic, strong) RZConversationCollectionViewHeader *collectionViewHeader;

/*!
 收到的消息是否显示发送者的名字

 @discussion 默认值为YES。
 您可以针对群聊、聊天室、单聊等不同场景，自己定制是否显示发送方的名字。
 */
@property (nonatomic) BOOL displayUserNameInCell;



/*!
 该会话的未读消息数
 */
@property (nonatomic, assign) NSInteger unReadMessage;

@property (nonatomic, assign) BOOL needAutoScrollToBottom;

#pragma mark - 输入工具栏

/*!
 会话页面下方的输入工具栏
 */
@property (nonatomic, strong) RZChatSessionInputBarControl *chatSessionInputBarControl;
/*!
 输入框的默认输入模式

 @discussion 默认值为RZChatSessionInputBarInputText，即文本输入模式。 请在[super viewWillAppear:animated]之后调用
 */
@property (nonatomic) RZChatSessionInputBarInputType defaultInputType;


#pragma mark - 界面操作

/*!
 滚动到列表最下方

 @param animated 是否开启动画效果
 */
- (void)scrollToBottomAnimated:(BOOL)animated;

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath;



#pragma mark flag
@property (nonatomic, assign) BOOL isConversationAppear;
@property (nonatomic, assign) BOOL isTakeNewPhoto;//发送的图片是否是刚拍摄的，是拍摄的则决定是否写入相册
@property (nonatomic, assign) BOOL isContinuousPlaying;     //是否正在连续播放语音消息
@property (nonatomic, assign) BOOL isTouchScrolled; /// 表示是否是触摸滚动



#pragma mark - 钩子
- (RZMessageContent *)willSendMessage:(RZMessageContent *)message;

- (RZMessage *)willAppendAndDisplayMessage:(RZMessage *)message;

@end

NS_ASSUME_NONNULL_END
